SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[LIQDiasDeLicenciaSinGoce]
@Agente INT,
@Servicio INT,
@Plaza INT,
@Resultado DECIMAL(18,4) OUTPUT,
@idLiquidacion INT,
@DiasALiquidar INT,
@DiasDelPeriodo INT,
@Desde DATETIME,
@Hasta DATETIME

AS 

SET NOCOUNT ON
SET DATEFORMAT DMY 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- REGISTRO DE ACTUALIZACIONES
-- 18/11/2005 - Se agregaron parametros @Desde y @Hasta para manejo de Fechas en Titulares y Suplentes
-- 05/01/2007 - Se cambio logica de calculo de Dias sin Goce
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

DECLARE @Afiliacion INT
DECLARE @horas INT
DECLARE @Organizacion INT
DECLARE @SituacionRevista INT
DECLARE @NroError INT
DECLARE @TotalDiasSinGoce INT
DECLARE @FechaAlta DATETIME, @FechaBaja DATETIME
DECLARE @SubOrganizacion INT
DECLARE @CabeceraDeLiquidacion INT 

SELECT @Afiliacion = idAfiliacion FROM tb_Afiliaciones WHERE idAgente = @Agente
SELECT @Horas= Horas, @SubOrganizacion = SubOrganizacion FROM tb_Plazas WHERE idPlaza = @Plaza
SELECT @Organizacion = ubicacionOrig, @SituacionRevista = SituacionRevista FROM tb_ServiciosAgentes WHERE idservicioAgente =  @Servicio

SELECT @TotalDiasSinGoce = 0

-- VIEJO-- VIEJO
-- Saco el total de dias de licencias SIN GOCE DE HABERES para el peridodo medido sobre el SERVICIO
--DECLARE DiasSinGoce CURSOR FOR 
--SELECT FechaAlta, FechaBaja FROM tb_SubServiciosAgentes WHERE ServicioAgente = @Servicio 
--	AND SituacionLaboral = 4 
--	AND ((FechaAlta >= @fdesde AND FechaBaja <= @fhasta) OR (FechaAlta <= @fdesde AND FechaBaja <= @fhasta) or (FechaAlta <= @fhasta and FechaBaja >= @fhasta) or (FechaAlta <= @fhasta And FechaBaja Is Null) or (FechaAlta > @fhasta and FechaBaja Is Null))


DECLARE DiasSinGoce CURSOR FOR SELECT FechaAlta, FechaBaja FROM tb_SubServiciosAgentes 
					WHERE ServicioAgente = @Servicio AND SituacionLaboral = 4 
						AND ((FechaAlta >= @Desde AND FechaBaja <= @Hasta) 
						--OR (FechaAlta <= @Desde AND FechaBaja <= @Hasta)  ----- 05-01-2007 - SE QUITO
						OR (FechaAlta <= @Desde AND (FechaBaja >= @Desde AND FechaBaja <= @Hasta)) ---- 05-01-2007 - SE AGREGO
						OR (FechaAlta <= @Hasta and FechaBaja >= @Hasta) 
						OR (FechaAlta <= @Hasta And FechaBaja IS NULL)
						OR (FechaAlta > @Hasta AND FechaBaja IS NULL))

OPEN DiasSinGoce
FETCH NEXT FROM DiasSinGoce INTO @FechaAlta, @FechaBaja

WHILE @@FETCH_STATUS = 0
BEGIN
	-- 05-01-2007 -- SE AGREGO
	IF @FechaAlta < @Desde
		SELECT @FechaAlta = @Desde 	
  
	IF @FechaBaja > @Hasta OR @FechaBaja IS NULL
		SELECT @FechaBaja = @Hasta
	
	SELECT @TotalDiasSinGoce = @TotalDiasSinGoce + DATEDIFF(DAY, @FechaAlta, @FechaBaja)+1

	-- 05-01-2007 -- SE QUITO
	/*
	If @FechaBaja > @Desde or @FechaBaja IS NULL
	BEGIN
		IF @Hasta > @FechaBaja Or @FechaBaja Is Null
			SELECT @FechaBaja = @Hasta
		IF @FechaAlta < @Desde
			SELECT @TotalDiasSinGoce = @TotalDiasSinGoce + DATEDIFF(DAY, @Desde, @FechaBaja)+1
		ELSE
			SELECT @TotalDiasSinGoce = @TotalDiasSinGoce + DATEDIFF(DAY, @FechaAlta, @FechaBaja)+1	
	END
	*/
	FETCH NEXT FROM DiasSinGoce INTO @FechaAlta, @FechaBaja
END

CLOSE DiasSinGoce
DEALLOCATE DiasSinGoce

IF (SELECT OrganizacionLiquidadora FROM tb_SubOrganizaciones WHERE idSubOrganizacion = @SubOrganizacion) Is Not Null
	SELECT @Organizacion = OrganizacionLiquidadora FROM tb_SubOrganizaciones WHERE idSubOrganizacion = @SubOrganizacion

IF @TotalDiasSinGoce < 0
	SELECT @TotalDiasSinGoce = 0

IF @TotalDiasSinGoce > 0
BEGIN
	IF @TotalDiasSinGoce >= @DiasDelPeriodo
		SELECT @TotalDiasSinGoce = @DiasDelPeriodo

	UPDATE tb_RegistroDeLiquidaciones Set MontoHaberes = MontoHaberes - @TotalDiasSinGoce WHERE Concepto = 29 And Liquidacion = @idLiquidacion And Servicio = @Servicio

	INSERT INTO tb_RegistroDeLiquidaciones (AfectadosPorAjuste, Afiliacion, Agente, Ajuste, Cantidad, Cargosalarial, Concepto, Descripcion, DescuentoExterno, Desde, Dias, Embargo, Hasta, Horas, LegajoSalarial, Liquidacion, MontoDescuento, MontoHaberes, Organizacion, Reclamado, Servicio, SituacionRevista, DiasLiquidados, SubOrganizacion)
	VALUES (null, @Afiliacion, @Agente, null, 1, null, 27, null, null, null, null, null, null, @horas, 0, @idLiquidacion, 0, @TotalDiasSinGoce, @Organizacion, null, @Servicio, @SituacionRevista, @diasALiquidar, @SubOrganizacion)
END
ELSE
	INSERT INTO tb_RegistroDeLiquidaciones (AfectadosPorAjuste, Afiliacion, Agente, Ajuste, Cantidad, Cargosalarial, Concepto, Descripcion, DescuentoExterno, Desde, Dias, Embargo, Hasta, Horas, LegajoSalarial, Liquidacion, MontoDescuento, MontoHaberes, Organizacion, Reclamado, Servicio, SituacionRevista, DiasLiquidados, SubOrganizacion)
	VALUES (null, @Afiliacion, @Agente, null, 1, null, 27, null, null, null, null, null, null, @horas, 0, @idLiquidacion, 0, 0, @Organizacion, null, @Servicio, @SituacionRevista, @diasALiquidar, @SubOrganizacion)
	
SELECT @NroError = @@error

IF @NroError <> 0
BEGIN 
	SELECT @CabeceraDeLiquidacion = IdCabeceraLiquidacion FROM tb_Liquidaciones WHERE IdLiquidacion = @IdLiquidacion

	 INSERT INTO tb_ErroresLiquidacion (Agente, Concepto, Diagnostico, Fecha, Liquidacion, Organizacion, Servicio, CabeceraDeLiquidacion, NumeroDeError) VALUES
	(@Agente, 27, convert(varchar,@NroError), getdate(), @idLiquidacion, @Organizacion, @Servicio, @CabeceraDeLiquidacion, @NroError)
END
GO
